home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Magazine / Payback / FirePower / FirePower.AMOS / FirePower.amosSourceCode < prev    next >
AMOS Source Code  |  1996-10-22  |  61KB  |  2,336 lines

  1. Set Buffer 50
  2. Trap Screen Close 0
  3. Hide On 
  4.  
  5. Track Loop On 
  6. Led Off 
  7. Track Play 3
  8. Randomize Timer
  9. Global DISK$
  10. If Prg State=1
  11.    Dir$="idh1:My Stuff/FirePower/"
  12. Else 
  13.    Break Off 
  14.    Amos To Front 
  15.    Amos Lock 
  16.    Request Off 
  17. End If 
  18. DISK$=Dir$
  19. Erase 1
  20.  
  21. Global _MINI,_BOSTON18,_BOSTON23
  22. _GETFONTS
  23.  
  24. Screen Open 1,320,256,2,Lowres
  25. Screen Hide 1
  26. Flash Off 
  27. Curs Off 
  28. Cls 0
  29. Set Font _MINI
  30. N$="Something wonderful happens..."
  31. Text 160-(Text Length(N$)/2),126,N$
  32. Palette $0,$0
  33. Screen Show 1
  34. Wait Vbl 
  35. Fade 2,$0,$3D3
  36. Wait 30
  37.  
  38. Unpack 10 To 0
  39. Screen Hide 0
  40. N=0
  41. For Y=1 To 256 Step 17
  42.    For X=1 To 222 Step 17
  43.       Inc N
  44.       Get Bob 0,N,X,Y To X+16,Y+16
  45.    Next 
  46. Next 
  47. Inc N
  48. Get Bob 0,N,246,8 To 248,10
  49. Hot Spot N,-7,-7
  50. Inc N
  51. Get Bob 0,N,263,8 To 265,10
  52. Hot Spot N,-7,-7
  53. Inc N
  54. Get Bob 0,N,280,8 To 282,10
  55. Hot Spot N,-7,-7
  56. Inc N
  57. Get Bob 0,N,290,1 To 306,17
  58. Inc N
  59. Get Bob 0,N,245,24 To 249,28
  60. Hot Spot N,-6,-6
  61. Inc N
  62. Get Bob 0,N,262,24 To 266,28
  63. Hot Spot N,-6,-6
  64. Inc N
  65. Get Bob 0,N,279,24 To 283,28
  66. Hot Spot N,-6,-6
  67. Inc N
  68. Get Bob 0,N,290,18 To 306,34
  69. For Y=35 To 256 Step 17
  70.    For X=239 To 290 Step 17
  71.       Inc N
  72.       Get Bob 0,N,X,Y To X+16,Y+16
  73.    Next 
  74. Next 
  75. Inc N
  76. Get Bob 0,N,0,273 To 284,310
  77. For X=286 To 303 Step 17
  78.    For Y=273 To 290 Step 17
  79.       Inc N
  80.       Get Bob 0,N,X,Y To X+16,Y+16
  81.    Next 
  82. Next 
  83. Unpack 11 To 0
  84. Screen Hide 0
  85. Inc N
  86. Get Bob 0,N,22,29 To 35,42
  87. Inc N
  88. Get Bob 0,N,40,29 To 53,42
  89. Cls 0
  90. For C=1 To 7
  91.    Ink 8-C,0,0
  92.    Draw C-1,0 To 0,C-1
  93. Next 
  94. Inc N
  95. Get Sprite 0,N,0,0 To 7,7
  96. Make Mask 
  97.  
  98. Dim _CONTROL(2,1),_FIRED(2),_HIT(2),_SKILL(2)
  99. Dim _XSPEED(55),_YSPEED(55)
  100. Global _CONTROL(),_XSPEED(),_YSPEED(),_PTY,_FIRED(),_HIT(),_SKILL(),_TOTALT
  101. ' _CONTROL(): 0=computer, 1=joy left, 2=joy right, 3=joy adapt. left, 4=joy adapt. right, 5=key 1, 6=key 2 
  102. ' Keys 1:
  103. 's,z,l-alt,l-amiga 
  104. ' Keys 2:
  105. '-,+,|,] 
  106. N=0
  107. For T=0 To 2
  108.    For P=0 To 1
  109.       Inc N
  110.       _CONTROL(T,P)=N
  111.    Next 
  112. Next 
  113. Dim _PF(2),_PH(2)
  114. Dim _SPECIAL_X(39),_SPECIAL_Y(39),_SPECIAL_XS(39),_SPECIAL_YS(39),_SPECIAL_F(39)
  115. Dim _TANK_X(2),_TANK_Y(2),_TANK_VELOCITY(2),_TANK_DIRECTION(2),_TANK_SHIELD(2),_TANK_FUEL(2),_TANK_XS(2),_TANK_YS(2),_TANK_SPECIAL(2)
  116. Dim _GUN_DIRECTION(2),_GUN_AMMO(2,1)
  117. Dim _FLAG_MODE(2),_FLAG_X(2),_FLAG_Y(2)
  118. Dim _MAP(39,31)
  119. Dim _BASE_X(2),_BASE_Y(2)
  120. Global _PF(),_PH(),_SPECIAL_X(),_SPECIAL_Y(),_SPECIAL_XS(),_SPECIAL_YS(),_SPECIAL_F()
  121. Global _TANK_X(),_TANK_Y(),_TANK_VELOCITY(),_TANK_DIRECTION(),_TANK_SHIELD(),_TANK_FUEL(),_TANK_XS(),_TANK_YS(),_TANK_SPECIAL()
  122. Global _GUN_DIRECTION(),_GUN_AMMO(),_FLAG_MODE(),_FLAG_X(),_FLAG_Y(),_MAP(),_BASE_X(),_BASE_Y()
  123. Restore BASEDAT
  124. For Z=0 To 2
  125.    Read _BASE_X(Z)
  126.    Read _BASE_Y(Z)
  127. Next 
  128.  
  129. Degree 
  130. For Z=0 To 55
  131.    D=((Z*360)/56)-90
  132.    _XSPEED(Z)=Cos(D)*16
  133.    _YSPEED(Z)=Sin(D)*16
  134. Next 
  135.  
  136. Screen 1
  137. Fade 2
  138. Wait 30
  139. Screen Close 1
  140.  
  141. Do 
  142.    
  143.    ' Title screen 
  144.    _TITLESCREEN
  145.    Exit If Param
  146.    
  147.    ' Setup screen 
  148.    _CONFIGSCREEN
  149.    
  150.    ' Main game
  151.    _MAINGAME[False]
  152.    WINNER=Param
  153.    
  154.    Track Play 3
  155.    
  156.    If WINNER<>-1
  157.       _RESULTS[WINNER]
  158.    End If 
  159.    
  160. Loop 
  161.  
  162. End 
  163.  
  164.  
  165. Procedure _MAINGAME[_DEMO]
  166.    
  167.    ' Open 'please wait' screen
  168.    _CREATEBACKGROUND
  169.    Screen 7
  170.    Colour 8,$FFF
  171.    Screen Open 4,320,256,32,Lowres
  172.    Screen Hide 4
  173.    Flash Off 
  174.    Curs Off 
  175.    Cls 0
  176.    For Z=0 To 8
  177.       Colour Z,$0
  178.    Next 
  179.    Screen Copy 7 To 4
  180.    Gr Writing 0
  181.    Ink 8,0,0
  182.    Set Font _MINI
  183.    N$="Generating landscape..."
  184.    Text 160-(Text Length(N$)/2),130,N$
  185.    Gr Writing 1
  186.    Screen Show 4
  187.    Fade 1 To 7
  188.    Screen Close 7
  189.    ' Setup variables
  190.    Dim _XS(2),_YS(2)
  191.    Dim _PD(2)
  192.    Dim _OX(2),_OY(2)
  193.    For Z=0 To 39
  194.       _SPECIAL_F(Z)=-100
  195.    Next 
  196.    _TOTALT=1
  197.    For Z=0 To 2
  198.       _FIRED(Z)=0
  199.       _HIT(Z)=0
  200.       _SKILL(Z)=0
  201.       _TANK_SPECIAL(Z)=0
  202.       _TANK_X(Z)=_BASE_X(Z)*16*64
  203.       _TANK_Y(Z)=_BASE_Y(Z)*16*64
  204.       _TANK_XS(Z)=0
  205.       _TANK_YS(Z)=0
  206.       _TANK_VELOCITY(Z)=0
  207.       _TANK_DIRECTION(Z)=0
  208.       _TANK_SHIELD(Z)=35
  209.       _TANK_FUEL(Z)=50000
  210.       _GUN_DIRECTION(Z)=0
  211.       _GUN_AMMO(Z,0)=99
  212.       _GUN_AMMO(Z,1)=5
  213.       _FLAG_MODE(Z)=-1
  214.       _FLAG_X(Z)=_BASE_X(Z)*16
  215.       _FLAG_Y(Z)=_BASE_Y(Z)*16
  216.    Next 
  217.    ' _FLAG_MODE(): -1=at coords, 0=in tank 0, 1=in tank 1, 2=in tank 2
  218.    
  219.    ' Create map (not as easy as it looks!)
  220.    Screen Open 2,640,512,16,Lowres
  221.    Screen Hide 2
  222.    Flash Off 
  223.    Curs Off 
  224.    Get Sprite Palette 
  225.    Led Off 
  226.    For X=0 To 624 Step 16
  227.       For Y=0 To 496 Step 16
  228.          R=233+Rnd(3)
  229.          Paste Bob X,Y,R
  230.          _MAP(X/16,Y/16)=R
  231.       Next 
  232.    Next 
  233.    Led Off 
  234.    For Z=1 To 200
  235.       X=(Rnd(37)+1)*16
  236.       Y=(Rnd(29)+1)*16
  237.       R=Rnd(8)
  238.       If R=0
  239.          T=228
  240.       End If 
  241.       If R=1
  242.          T=232
  243.       End If 
  244.       If R>1
  245.          T=268+R
  246.       End If 
  247.       Paste Bob X,Y,T
  248.       _MAP(X/16,Y/16)=T
  249.    Next 
  250.    For A=1 To 2
  251.       Led Off 
  252.       X=Rnd(35)+2
  253.       Y=Rnd(27)+2
  254.       S=Rnd(50)+50
  255.       For Z=1 To S
  256.          R=Rnd(3)+248
  257.          Paste Bob X*16,Y*16,R
  258.          _MAP(X,Y)=R
  259.          R=Rnd(3)
  260.          If R=0
  261.             Inc X
  262.          End If 
  263.          If R=1
  264.             Dec X
  265.          End If 
  266.          If R=2
  267.             Inc Y
  268.          End If 
  269.          If R=3
  270.             Dec Y
  271.          End If 
  272.          If X>37
  273.             X=37
  274.          End If 
  275.          If X<2
  276.             X=2
  277.          End If 
  278.          If Y>29
  279.             Y=29
  280.          End If 
  281.          If Y<2
  282.             Y=2
  283.          End If 
  284.       Next 
  285.    Next 
  286.    AB=0
  287.    Repeat 
  288.       Led Off 
  289.       CHANGED=False
  290.       For X=1 To 38
  291.          For Y=1 To 30
  292.             _WATER[_MAP(X,Y)]
  293.             If Param=False
  294.                SR=0
  295.                _WATER[_MAP(X,Y-1)]
  296.                A=-1-Param
  297.                _WATER[_MAP(X+1,Y)]
  298.                B=-1-Param
  299.                _WATER[_MAP(X,Y+1)]
  300.                C=-1-Param
  301.                _WATER[_MAP(X-1,Y)]
  302.                D=-1-Param
  303.                _TEST[A,B,C,D]
  304.                If Param
  305.                   N=248+Rnd(3)
  306.                   _MAP(X,Y)=N
  307.                   Paste Bob X*16,Y*16,N
  308.                   CHANGED=True
  309.                End If 
  310.             End If 
  311.          Next 
  312.       Next 
  313.       Inc AB
  314.       If AB>10
  315.          CHANGED=False
  316.       End If 
  317.    Until CHANGED=False
  318.    For X=1 To 38
  319.       Led Off 
  320.       For Y=1 To 30
  321.          _WATER[_MAP(X,Y)]
  322.          If Param=False
  323.             _WATER[_MAP(X-1,Y-1)]
  324.             A=Param
  325.             _WATER[_MAP(X,Y-1)]
  326.             B=Param
  327.             _WATER[_MAP(X+1,Y-1)]
  328.             C=Param
  329.             _WATER[_MAP(X+1,Y)]
  330.             D=Param
  331.             _WATER[_MAP(X+1,Y+1)]
  332.             E=Param
  333.             _WATER[_MAP(X,Y+1)]
  334.             F=Param
  335.             _WATER[_MAP(X-1,Y+1)]
  336.             G=Param
  337.             _WATER[_MAP(X-1,Y)]
  338.             H=Param
  339.             _NUMBER[A,B,C,D,E,F,G,H]
  340.             If Param<>0
  341.                Paste Bob X*16,Y*16,Param
  342.                _MAP(X,Y)=Param
  343.             End If 
  344.          End If 
  345.       Next 
  346.    Next 
  347.    For Z=0 To 2
  348.       _MAP(_BASE_X(Z),_BASE_Y(Z))=Z+264
  349.       Paste Bob _BASE_X(Z)*16,_BASE_Y(Z)*16,Z+264
  350.    Next 
  351.    For O=1 To 3
  352.       Repeat 
  353.          X=Rnd(37)+1
  354.          Y=Rnd(29)+1
  355.          M=_MAP(X,Y)
  356.          If M<233 or M>247
  357.             OKAY=False
  358.          Else 
  359.             OKAY=True
  360.          End If 
  361.       Until OKAY
  362.       _MAP(X,Y)=239
  363.       D=Rnd(3)
  364.       Led Off 
  365.       For Z=1 To 50
  366.          OD=D
  367.          Repeat 
  368.             If D=0
  369.                XS=1
  370.                YS=0
  371.             End If 
  372.             If D=1
  373.                XS=0
  374.                YS=1
  375.             End If 
  376.             If D=2
  377.                XS=-1
  378.                YS=0
  379.             End If 
  380.             If D=3
  381.                XS=0
  382.                YS=-1
  383.             End If 
  384.             OKAY=True
  385.             If X+XS>39 or Y+YS>31 or X+XS<0 or Y+YS<0
  386.                OKAY=False
  387.             Else 
  388.                M=_MAP(X+XS,Y+YS)
  389.                If M<233 or M>247
  390.                   OKAY=False
  391.                End If 
  392.             End If 
  393.             If OKAY=False
  394.                Add D,1,0 To 3
  395.             End If 
  396.          Until OKAY or OD=D
  397.          Add X,XS
  398.          Add Y,YS
  399.          _MAP(X,Y)=239
  400.       Next 
  401.    Next 
  402.    For X=0 To 39
  403.       Led Off 
  404.       For Y=0 To 31
  405.          _CHECK[X,Y,0,0]
  406.          If Param=239
  407.             _CHECK[X,Y,1,0]
  408.             A=False
  409.             If Param=238 or Param=239 or Param=240 or Param=241 or Param=242 or Param=245 or Param=246 or Param=293
  410.                A=True
  411.             End If 
  412.             _CHECK[X,Y,-1,0]
  413.             B=False
  414.             If Param=238 or Param=239 or Param=240 or Param=242 or Param=243 or Param=244 or Param=247 or Param=292
  415.                B=True
  416.             End If 
  417.             _CHECK[X,Y,0,1]
  418.             C=False
  419.             If Param=237 or Param=239 or Param=241 or Param=242 or Param=243 or Param=246 or Param=247 or Param=290
  420.                C=True
  421.             End If 
  422.             _CHECK[X,Y,0,-1]
  423.             D=False
  424.             If Param=237 or Param=239 or Param=240 or Param=241 or Param=243 or Param=244 or Param=245 or Param=291
  425.                D=True
  426.             End If 
  427.             NM=_MAP(X,Y)
  428.             If A
  429.                NM=292
  430.             End If 
  431.             If B
  432.                NM=293
  433.             End If 
  434.             If C
  435.                NM=291
  436.             End If 
  437.             If D
  438.                NM=290
  439.             End If 
  440.             If A and B
  441.                NM=238
  442.             End If 
  443.             If C and D
  444.                NM=237
  445.             End If 
  446.             If A and D
  447.                NM=247
  448.             End If 
  449.             If A and C
  450.                NM=244
  451.             End If 
  452.             If C and B
  453.                NM=245
  454.             End If 
  455.             If B and D
  456.                NM=246
  457.             End If 
  458.             If A and B and D
  459.                NM=242
  460.             End If 
  461.             If D and A and C
  462.                NM=243
  463.             End If 
  464.             If A and B and C
  465.                NM=240
  466.             End If 
  467.             If B and C and D
  468.                NM=241
  469.             End If 
  470.             If A and B and C and D
  471.                NM=239
  472.             End If 
  473.             Paste Bob X*16,Y*16,NM
  474.             _MAP(X,Y)=NM
  475.          End If 
  476.       Next 
  477.    Next 
  478.    
  479.    Unpack 11 To 7
  480.    Screen Hide 7
  481.    Led Off 
  482.    Ink 0,0,0
  483.    Bar 22,29 To 35,42
  484.    Bar 40,29 To 53,42
  485.    Colour 8,$FF0
  486.    Screen Open 1,320,64,16,Lowres
  487.    Screen Hide 1
  488.    Curs Off 
  489.    Flash Off 
  490.    Screen Copy 7 To 1
  491.    For Z=0 To 15
  492.       Colour Z,$0
  493.    Next 
  494.    Screen Display 1,128,244,320,64
  495.    Set Font _MINI
  496.    For Z=0 To 2
  497.       _UPDATESCORE[True,True,True,True,Z]
  498.    Next 
  499.    
  500.    If _DEMO=False
  501.       Track Stop 
  502.    End If 
  503.    Screen 4
  504.    Fade 1
  505.    Wait 15
  506.    Screen Close 4
  507.    
  508.    Screen Show 1
  509.    Screen 1
  510.    Fade 1 To 7
  511.    Wait Vbl 
  512.    Timer=0
  513.    Screen Close 7
  514.    
  515.    Screen Open 0,320,200,16,Lowres
  516.    Screen Hide 0
  517.    Curs Off 
  518.    Flash Off 
  519.    Cls 0
  520.    For Z=0 To 15
  521.       Colour Z,$0
  522.    Next 
  523.    Screen Display 0,128,42,320,200
  524.    Screen Show 0
  525.    Screen 0
  526.    Double Buffer 
  527.    Autoback 0
  528.    Bob Update Off 
  529.    _CURRSPECIAL=0
  530.    _WON=0
  531.    Wait Max(1,15-Timer)
  532.    Set Rainbow 0,8,32,"","",""
  533.    For Y=0 To 31
  534.       Rain(0,Y)=(256*15)+(((31-Y)/2)*16)
  535.    Next 
  536.    Rainbow 0,0,272,32
  537.    If _DEMO=False
  538.       Volume %111,32
  539.    End If 
  540.    Fade 1 To 2
  541.    Timer=0
  542.    DDD=14
  543.    LCT=Timer+250
  544.    LUD=Timer+50
  545.    Clear Key 
  546.    
  547.    Repeat 
  548.       Screen 2
  549.       Bob Clear 
  550.       If Timer>LCT
  551.          If DDD=14
  552.             DDD=-14
  553.          Else 
  554.             DDD=14
  555.          End If 
  556.          LCT=Timer+250
  557.       End If 
  558.       If Timer>LUD
  559.          For Z=0 To 2
  560.             _UPDATESCORE[True,True,True,True,Z]
  561.             _INTANK=False
  562.             For A=0 To 2
  563.                If _FLAG_MODE(A)=Z
  564.                   _INTANK=True
  565.                   A=5
  566.                End If 
  567.             Next 
  568.             _ATBASE=False
  569.             For A=0 To 2
  570.                If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(Z)*16 and _FLAG_Y(A)=_BASE_Y(Z)*16
  571.                   _ATBASE=True
  572.                   A=5
  573.                End If 
  574.             Next 
  575.             If _ATBASE
  576.                Inc _SKILL(Z)
  577.             End If 
  578.             If _INTANK
  579.                Inc _SKILL(Z)
  580.             End If 
  581.          Next 
  582.          LUD=Timer+50
  583.          Add _TOTALT,2
  584.       End If 
  585.       _DDIR=Peek($BFE101)
  586.       For T=0 To 2
  587.          Led Off 
  588.          If _TANK_SPECIAL(T)<=0
  589.             _INTANK=-1
  590.             For A=0 To 2
  591.                If _FLAG_MODE(A)=T
  592.                   _INTANK=A
  593.                   A=5
  594.                End If 
  595.             Next 
  596.             
  597.             _LEFT=False
  598.             _RIGHT=False
  599.             _ACCEL=False
  600.             _BRAKE=False
  601.             _GUNLEFT=False
  602.             _GUNRIGHT=False
  603.             _GUNFIRE=0
  604.             If _CONTROL(T,0)=0 or _DEMO
  605.                ' Decide what to chase 
  606.                If _INTANK=-1
  607.                   MDIST=999999
  608.                   A=T
  609.                   For NAN=0 To 2
  610.                      TEST=True
  611.                      If _FLAG_MODE(A)<=-1
  612.                         If _FLAG_X(A)=_BASE_X(T)*16
  613.                            If _FLAG_Y(A)=_BASE_Y(T)*16
  614.                               TEST=False
  615.                            End If 
  616.                         End If 
  617.                      End If 
  618.                      If _FLAG_MODE(A)=T
  619.                         TEST=False
  620.                      End If 
  621.                      If TEST=True
  622.                         If _FLAG_MODE(A)<=-1
  623.                            FX=_FLAG_X(A)*64
  624.                            FY=_FLAG_Y(A)*64
  625.                         Else 
  626.                            FX=_TANK_X(_FLAG_MODE(A))
  627.                            FY=_TANK_Y(_FLAG_MODE(A))
  628.                         End If 
  629.                         DIST=Int(Sqr(((_TANK_X(T)-FX)^2)+((_TANK_Y(T)-FY)^2))/6400)*6400
  630.                         If DIST<MDIST
  631.                            MDIST=DIST
  632.                            NX=FX
  633.                            NY=FY
  634.                         End If 
  635.                      End If 
  636.                      Add A,1,0 To 2
  637.                   Next 
  638.                Else 
  639.                   NX=_BASE_X(T)*64*16
  640.                   NY=_BASE_Y(T)*64*16
  641.                End If 
  642.                ' Work out which direction to face 
  643.                DX=_TANK_X(T)-NX
  644.                DY=_TANK_Y(T)-NY
  645.                If DX=0
  646.                   If DY>0
  647.                      D=14
  648.                   Else 
  649.                      D=-14
  650.                   End If 
  651.                Else 
  652.                   A#=DY
  653.                   A#=A#/DX
  654.                   A#=Atan(A#)
  655.                   D=((A#*56)/360)
  656.                   If DX<0
  657.                      Add D,28
  658.                   End If 
  659.                End If 
  660.                Add D,-14
  661.                If D<0
  662.                   Add D,56
  663.                End If 
  664.                If D>55
  665.                   Add D,-56
  666.                End If 
  667.                ' Go around objects if necessary 
  668.                NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
  669.                NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
  670.                NX=Max(Min(NX,39),0)
  671.                NY=Max(Min(NY,31),0)
  672.                M=_MAP(NX,NY)
  673.                If(M=>248 and M<=263) or(M=>270 and M<=276)
  674.                   NX=(_TANK_X(T)+(_XSPEED(_PD(T))*50)+512)/1024
  675.                   NY=(_TANK_Y(T)+(_YSPEED(_PD(T))*50)+512)/1024
  676.                   NX=Max(Min(NX,39),0)
  677.                   NY=Max(Min(NY,31),0)
  678.                   M=_MAP(NX,NY)
  679.                   ND=0
  680.                   While(M=>248 and M<=263) or(M=>270 and M<=276)
  681.                      Add D,DDD
  682.                      If D<0
  683.                         Add D,56
  684.                      End If 
  685.                      If D>55
  686.                         Add D,-56
  687.                      End If 
  688.                      NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
  689.                      NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
  690.                      NX=Max(Min(NX,39),0)
  691.                      NY=Max(Min(NY,31),0)
  692.                      M=_MAP(NX,NY)
  693.                      Inc ND
  694.                      If ND>3
  695.                         M=0
  696.                      End If 
  697.                   Wend 
  698.                   If ND>0
  699.                      _PD(T)=D
  700.                   Else 
  701.                      D=_PD(T)
  702.                   End If 
  703.                Else 
  704.                   _PD(T)=D
  705.                End If 
  706.                ND=0
  707.                While(M=>248 and M<=263) or(M=>270 and M<=276)
  708.                   Add D,DDD
  709.                   If D<0
  710.                      Add D,56
  711.                   End If 
  712.                   If D>55
  713.                      Add D,-56
  714.                   End If 
  715.                   NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
  716.                   NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
  717.                   NX=Max(Min(NX,39),0)
  718.                   NY=Max(Min(NY,31),0)
  719.                   M=_MAP(NX,NY)
  720.                   Inc ND
  721.                   If ND>3
  722.                      M=0
  723.                   End If 
  724.                Wend 
  725.                ' Actually point the tank in the correct direction               
  726.                AD=_TANK_DIRECTION(T)-D
  727.                If Abs(AD)>28
  728.                   AD=-AD
  729.                End If 
  730.                If AD>0
  731.                   _LEFT=True
  732.                End If 
  733.                If AD<0
  734.                   _RIGHT=True
  735.                End If 
  736.                _ACCEL=True
  737.             End If 
  738.             If _CONTROL(T,1)=0 or _DEMO
  739.                If T=0
  740.                   A=1
  741.                   B=2
  742.                End If 
  743.                If T=1
  744.                   A=0
  745.                   B=2
  746.                End If 
  747.                If T=2
  748.                   A=0
  749.                   B=1
  750.                End If 
  751.                DISTA=Sqr(((_TANK_X(T)-_TANK_X(A))^2)+((_TANK_Y(T)-_TANK_Y(A))^2))
  752.                DISTB=Sqr(((_TANK_X(T)-_TANK_X(B))^2)+((_TANK_Y(T)-_TANK_Y(B))^2))
  753.                If _TANK_SPECIAL(A)>0
  754.                   DISTA=999999
  755.                End If 
  756.                If _TANK_SPECIAL(B)>0
  757.                   DISTB=999999
  758.                End If 
  759.                If DISTA<DISTB
  760.                   FRAMES=DISTA/448
  761.                   NX=_TANK_X(A)+(_XS(A)*FRAMES)
  762.                   NY=_TANK_Y(A)+(_YS(A)*FRAMES)
  763.                Else 
  764.                   FRAMES=DISTB/448
  765.                   NX=_TANK_X(B)+(_XS(B)*FRAMES)
  766.                   NY=_TANK_Y(B)+(_YS(B)*FRAMES)
  767.                End If 
  768.                DX=_TANK_X(T)-NX
  769.                DY=_TANK_Y(T)-NY
  770.                If DX=0
  771.                   If DY>0
  772.                      D=14
  773.                   Else 
  774.                      D=-14
  775.                   End If 
  776.                Else 
  777.                   A#=DY
  778.                   A#=A#/DX
  779.                   A#=Atan(A#)
  780.                   D=((A#*56)/360)
  781.                   If DX<0
  782.                      Add D,28
  783.                   End If 
  784.                End If 
  785.                Add D,-14
  786.                If D<0
  787.                   Add D,56
  788.                End If 
  789.                If D>55
  790.                   Add D,-56
  791.                End If 
  792.                AD=_GUN_DIRECTION(T)-D
  793.                If Abs(AD)>28
  794.                   AD=-AD
  795.                End If 
  796.                If AD>0
  797.                   _GUNLEFT=True
  798.                End If 
  799.                If AD<0
  800.                   _GUNRIGHT=True
  801.                End If 
  802.                If Min(DISTA,DISTB)<=16384
  803.                   If _GUN_DIRECTION(T)=D
  804.                      If Rnd(1)=0
  805.                         _GUNFIRE=1
  806.                      Else 
  807.                         If Rnd(20)=0
  808.                            _GUNFIRE=2
  809.                         End If 
  810.                      End If 
  811.                   End If 
  812.                End If 
  813.             End If 
  814.             If _DEMO=False
  815.                If _CONTROL(T,0)=1
  816.                   If Jleft(1)
  817.                      _LEFT=True
  818.                   End If 
  819.                   If Jright(1)
  820.                      _RIGHT=True
  821.                   End If 
  822.                   If Jup(1)
  823.                      _ACCEL=True
  824.                   End If 
  825.                   If Jdown(1)
  826.                      _BRAKE=True
  827.                   End If 
  828.                End If 
  829.                If _CONTROL(T,1)=1
  830.                   If Jleft(1)
  831.                      _GUNLEFT=True
  832.                   End If 
  833.                   If Jright(1)
  834.                      _GUNRIGHT=True
  835.                   End If 
  836.                   If Jup(1)
  837.                      _GUNFIRE=1
  838.                   End If 
  839.                   If Jdown(1)
  840.                      _GUNFIRE=2
  841.                   End If 
  842.                End If 
  843.                If _CONTROL(T,0)=2
  844.                   If Jleft(0)
  845.                      _LEFT=True
  846.                   End If 
  847.                   If Jright(0)
  848.                      _RIGHT=True
  849.                   End If 
  850.                   If Jup(0)
  851.                      _ACCEL=True
  852.                   End If 
  853.                   If Jdown(0)
  854.                      _BRAKE=True
  855.                   End If 
  856.                End If 
  857.                If _CONTROL(T,1)=2
  858.                   If Jleft(0)
  859.                      _GUNLEFT=True
  860.                   End If 
  861.                   If Jright(0)
  862.                      _GUNRIGHT=True
  863.                   End If 
  864.                   If Jup(0)
  865.                      _GUNFIRE=1
  866.                   End If 
  867.                   If Jdown(0)
  868.                      _GUNFIRE=2
  869.                   End If 
  870.                End If 
  871.                If _CONTROL(T,0)=3
  872.                   If Btst(2,_DDIR)=0
  873.                      _LEFT=True
  874.                   End If 
  875.                   If Btst(3,_DDIR)=0
  876.                      _RIGHT=True
  877.                   End If 
  878.                   If Btst(0,_DDIR)=0
  879.                      _ACCEL=True
  880.                   End If 
  881.                   If Btst(1,_DDIR)=0
  882.                      _BRAKE=True
  883.                   End If 
  884.                End If 
  885.                If _CONTROL(T,1)=3
  886.                   If Btst(2,_DDIR)=0
  887.                      _GUNLEFT=True
  888.                   End If 
  889.                   If Btst(3,_DDIR)=0
  890.                      _GUNRIGHT=True
  891.                   End If 
  892.                   If Btst(0,_DDIR)=0
  893.                      _GUNFIRE=1
  894.                   End If 
  895.                   If Btst(1,_DDIR)=0
  896.                      _GUNFIRE=2
  897.                   End If 
  898.                End If 
  899.                If _CONTROL(T,0)=4
  900.                   If Btst(6,_DDIR)=0
  901.                      _LEFT=True
  902.                   End If 
  903.                   If Btst(7,_DDIR)=0
  904.                      _RIGHT=True
  905.                   End If 
  906.                   If Btst(4,_DDIR)=0
  907.                      _ACCEL=True
  908.                   End If 
  909.                   If Btst(5,_DDIR)=0
  910.                      _BRAKE=True
  911.                   End If 
  912.                End If 
  913.                If _CONTROL(T,1)=4
  914.                   If Btst(6,_DDIR)=0
  915.                      _GUNLEFT=True
  916.                   End If 
  917.                   If Btst(7,_DDIR)=0
  918.                      _GUNRIGHT=True
  919.                   End If 
  920.                   If Btst(4,_DDIR)=0
  921.                      _GUNFIRE=1
  922.                   End If 
  923.                   If Btst(5,_DDIR)=0
  924.                      _GUNFIRE=2
  925.                   End If 
  926.                End If 
  927.                If _CONTROL(T,0)=5
  928.                   K=Key Shift
  929.                   If Btst(4,K)
  930.                      _LEFT=True
  931.                   End If 
  932.                   If Btst(6,K)
  933.                      _RIGHT=True
  934.                   End If 
  935.                   If Key State(33)
  936.                      _ACCEL=True
  937.                   End If 
  938.                   If Key State(49)
  939.                      _BRAKE=True
  940.                   End If 
  941.                End If 
  942.                If _CONTROL(T,1)=5
  943.                   K=Key Shift
  944.                   If Btst(4,K)
  945.                      _GUNLEFT=True
  946.                   End If 
  947.                   If Btst(6,K)
  948.                      _GUNRIGHT=True
  949.                   End If 
  950.                   If Key State(33)
  951.                      _GUNFIRE=1
  952.                   End If 
  953.                   If Key State(49)
  954.                      _GUNFIRE=2
  955.                   End If 
  956.                End If 
  957.                If _CONTROL(T,0)=6
  958.                   If Key State(11)
  959.                      _LEFT=True
  960.                   End If 
  961.                   If Key State(12)
  962.                      _RIGHT=True
  963.                   End If 
  964.                   If Key State(13)
  965.                      _ACCEL=True
  966.                   End If 
  967.                   If Key State(27)
  968.                      _BRAKE=True
  969.                   End If 
  970.                End If 
  971.                If _CONTROL(T,1)=6
  972.                   If Key State(11)
  973.                      _GUNLEFT=True
  974.                   End If 
  975.                   If Key State(12)
  976.                      _GUNRIGHT=True
  977.                   End If 
  978.                   If Key State(13)
  979.                      _GUNFIRE=1
  980.                   End If 
  981.                   If Key State(27)
  982.                      _GUNFIRE=2
  983.                   End If 
  984.                End If 
  985.             End If 
  986.             
  987.             If _LEFT
  988.                Add _TANK_DIRECTION(T),-1,0 To 55
  989.             End If 
  990.             If _RIGHT
  991.                Add _TANK_DIRECTION(T),1,0 To 55
  992.             End If 
  993.             NX=(_TANK_X(T)+512)/1024
  994.             NY=(_TANK_Y(T)+512)/1024
  995.             NX=Max(Min(NX,39),0)
  996.             NY=Max(Min(NY,31),0)
  997.             M=_MAP(NX,NY)
  998.             If(M=>237 and M<=247) or(M=>290 and M<=293)
  999.                MV=16
  1000.             Else 
  1001.                MV=12
  1002.             End If 
  1003.             If _INTANK>-1
  1004.                MV=(MV*2)/3
  1005.             End If 
  1006.             If _TANK_VELOCITY(T)>MV
  1007.                _TANK_VELOCITY(T)=MV
  1008.             End If 
  1009.             If _TANK_VELOCITY(T)<-MV
  1010.                _TANK_VELOCITY(T)=-MV
  1011.             End If 
  1012.             If _ACCEL and _TANK_VELOCITY(T)<MV
  1013.                Inc _TANK_VELOCITY(T)
  1014.             End If 
  1015.             If _BRAKE and _TANK_VELOCITY(T)>-MV
  1016.                Dec _TANK_VELOCITY(T)
  1017.             End If 
  1018.             
  1019.             TTX=_TANK_X(T)
  1020.             TTY=_TANK_Y(T)
  1021.             HIT=-1
  1022.             For Z=0 To 2
  1023.                If Z<>T
  1024.                   If Bob Col(T*2,Z*2 To Z*2)
  1025.                      HIT=Z
  1026.                      Z=5
  1027.                   End If 
  1028.                End If 
  1029.             Next 
  1030.             If HIT<>-1
  1031.                If _PH(T)=0
  1032.                   _TANK_XS(HIT)=_XSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
  1033.                   _TANK_YS(HIT)=_YSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
  1034.                   _TANK_VELOCITY(T)=0
  1035.                   If _DEMO=False
  1036.                      Sam Play 8,6
  1037.                   End If 
  1038.                   Dec _TANK_SHIELD(T)
  1039.                   If _TANK_SHIELD(T)<=0
  1040.                      If _DEMO=False
  1041.                         Sam Play 8,5
  1042.                      End If 
  1043.                      NX=_TANK_X(T)/4
  1044.                      NY=_TANK_Y(T)/4
  1045.                      For TA=1 To 10
  1046.                         _SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
  1047.                         _SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
  1048.                         _SPECIAL_F(_CURRSPECIAL)=280
  1049.                         Add _CURRSPECIAL,1,0 To 39
  1050.                      Next 
  1051.                      _OX(T)=_TANK_X(T)/64
  1052.                      _OY(T)=_TANK_Y(T)/64
  1053.                      _TANK_VELOCITY(T)=0
  1054.                      _TANK_SHIELD(T)=35
  1055.                      _TANK_FUEL(T)=50000
  1056.                      _TANK_SPECIAL(T)=100
  1057.                      _GUN_AMMO(T,0)=99
  1058.                      _GUN_AMMO(T,1)=5
  1059.                      If _INTANK>-1
  1060.                         _FLAG_MODE(_INTANK)=-5
  1061.                         _FLAG_X(_INTANK)=_TANK_X(T)/64
  1062.                         _FLAG_Y(_INTANK)=_TANK_Y(T)/64
  1063.                      End If 
  1064.                      _TANK_X(T)=_BASE_X(T)*16*64
  1065.                      _TANK_Y(T)=_BASE_Y(T)*16*64
  1066.                   End If 
  1067.                   _UPDATESCORE[True,True,True,True,T]
  1068.                   _PH(T)=1
  1069.                End If 
  1070.             Else 
  1071.                _PH(T)=0
  1072.             End If 
  1073.             
  1074.             PX=_TANK_X(T)
  1075.             PY=_TANK_Y(T)
  1076.             OX=(PX+512)/1024
  1077.             OY=(PY+512)/1024
  1078.             OX=Max(Min(OX,39),0)
  1079.             OY=Max(Min(OY,31),0)
  1080.             _TANK_XS(T)=Min(Max(-512,_TANK_XS(T)),512)
  1081.             _TANK_YS(T)=Min(Max(-512,_TANK_YS(T)),512)
  1082.             Add _TANK_X(T),_XSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
  1083.             Add _TANK_Y(T),_YSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
  1084.             Add _TANK_X(T),_TANK_XS(T)
  1085.             Add _TANK_Y(T),_TANK_YS(T)
  1086.             
  1087.             Add _TANK_XS(T),Min(16,Max(-16,-_TANK_XS(T)))
  1088.             Add _TANK_YS(T),Min(16,Max(-16,-_TANK_YS(T)))
  1089.             
  1090.             If _DEMO=False
  1091.                Sam Play 2^T,1,8000+(Abs(_TANK_VELOCITY(T))*600)
  1092.             End If 
  1093.             NX=(_TANK_X(T)+512)/1024
  1094.             NY=(_TANK_Y(T)+512)/1024
  1095.             NX=Max(Min(NX,39),0)
  1096.             NY=Max(Min(NY,31),0)
  1097.             M=_MAP(NX,NY)
  1098.             TR=0
  1099.             If M=T+264
  1100.                A=False
  1101.                B=False
  1102.                C=False
  1103.                D=False
  1104.                For A=0 To 2
  1105.                   If _FLAG_MODE(A)=T
  1106.                      _FLAG_MODE(A)=-5
  1107.                      _FLAG_X(A)=_BASE_X(T)*16
  1108.                      _FLAG_Y(A)=_BASE_Y(T)*16
  1109.                      C=True
  1110.                   End If 
  1111.                Next 
  1112.                _ATBASE=0
  1113.                For A=0 To 2
  1114.                   If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(T)*16 and _FLAG_Y(A)=_BASE_Y(T)*16
  1115.                      Inc _ATBASE
  1116.                   End If 
  1117.                Next 
  1118.                If _ATBASE=>2
  1119.                   _WON=T+1
  1120.                End If 
  1121.                If _TANK_SHIELD(T)<35
  1122.                   Inc _TANK_SHIELD(T)
  1123.                   A=True
  1124.                End If 
  1125.                If _TANK_FUEL(T)<49000
  1126.                   Add _TANK_FUEL(T),1000
  1127.                   B=True
  1128.                End If 
  1129.                If _GUN_AMMO(T,0)<99
  1130.                   Inc _GUN_AMMO(T,0)
  1131.                   D=True
  1132.                End If 
  1133.                If _GUN_AMMO(T,1)<5
  1134.                   Inc _GUN_AMMO(T,1)
  1135.                   D=True
  1136.                End If 
  1137.                _UPDATESCORE[A,B,C,D,T]
  1138.             End If 
  1139.             If(M=>248 and M<=263) or(M=>270 and M<=276)
  1140.                M=_MAP(OX,NY)
  1141.                TR=1
  1142.                If(M=>248 and M<=263) or(M=>270 and M<=276)
  1143.                   M=_MAP(NX,OY)
  1144.                   TR=2
  1145.                   If(M=>248 and M<=263) or(M=>270 and M<=276)
  1146.                      TR=3
  1147.                   End If 
  1148.                End If 
  1149.             End If 
  1150.             If TR=1
  1151.                _TANK_X(T)=PX
  1152.             End If 
  1153.             If TR=2
  1154.                _TANK_Y(T)=PY
  1155.             End If 
  1156.             If TR=3
  1157.                _TANK_X(T)=PX
  1158.                _TANK_Y(T)=PY
  1159.             End If 
  1160.             D=_TANK_DIRECTION(T)
  1161.             Add D,-14
  1162.             If D<0
  1163.                Add D,56
  1164.             End If 
  1165.              Extension_12_0394(_TANK_X(T)/64)+8+(_XSPEED(D)/3),(_TANK_Y(T)/64)+8+(_YSPEED(D)/3),8
  1166.             Add D,28
  1167.             If D>55
  1168.                Add D,-56
  1169.             End If 
  1170.              Extension_12_0394(_TANK_X(T)/64)+8+(_XSPEED(D)/3),(_TANK_Y(T)/64)+8+(_YSPEED(D)/3),8
  1171.             
  1172.             O=_TANK_FUEL(T)/1428
  1173.             Add _TANK_FUEL(T),-(Abs((_TANK_VELOCITY(T))+4)*2)
  1174.             If _TANK_FUEL(T)>0
  1175.                If O<>_TANK_FUEL(T)/1428
  1176.                   _UPDATESCORE[False,True,False,False,T]
  1177.                End If 
  1178.             Else 
  1179.                If _DEMO=False
  1180.                   Sam Play 8,5
  1181.                End If 
  1182.                NX=_TANK_X(T)/4
  1183.                NY=_TANK_Y(T)/4
  1184.                For TA=1 To 10
  1185.                   _SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
  1186.                   _SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
  1187.                   _SPECIAL_F(_CURRSPECIAL)=280
  1188.                   Add _CURRSPECIAL,1,0 To 39
  1189.                Next 
  1190.                _OX(T)=_TANK_X(T)/64
  1191.                _OY(T)=_TANK_Y(T)/64
  1192.                _TANK_VELOCITY(T)=0
  1193.                _TANK_SHIELD(T)=35
  1194.                _TANK_FUEL(T)=50000
  1195.                _TANK_SPECIAL(T)=100
  1196.                _GUN_AMMO(T,0)=99
  1197.                _GUN_AMMO(T,1)=5
  1198.                _INTANK=-1
  1199.                For A=0 To 2
  1200.                   If _FLAG_MODE(A)=T
  1201.                      _INTANK=A
  1202.                      A=5
  1203.                   End If 
  1204.                Next 
  1205.                If _INTANK>-1
  1206.                   _FLAG_MODE(_INTANK)=-5
  1207.                   _FLAG_X(_INTANK)=_TANK_X(T)/64
  1208.                   _FLAG_Y(_INTANK)=_TANK_Y(T)/64
  1209.                End If 
  1210.                _TANK_X(T)=_BASE_X(T)*16*64
  1211.                _TANK_Y(T)=_BASE_Y(T)*16*64
  1212.                _UPDATESCORE[True,True,True,True,T]
  1213.             End If 
  1214.             
  1215.             _TANK_X(T)=Min(Max(0,_TANK_X(T)),39936)
  1216.             _TANK_Y(T)=Min(Max(0,_TANK_Y(T)),31744)
  1217.             
  1218.             If _GUNLEFT
  1219.                Add _GUN_DIRECTION(T),-1,0 To 55
  1220.             End If 
  1221.             If _GUNRIGHT
  1222.                Add _GUN_DIRECTION(T),1,0 To 55
  1223.             End If 
  1224.             If _GUNFIRE=1
  1225.                If _GUN_AMMO(T,0)>0
  1226.                   Inc _FIRED(T)
  1227.                   If _DEMO=False
  1228.                      Sam Play 8,4
  1229.                   End If 
  1230.                   _SPECIAL_X(_CURRSPECIAL)=_TANK_X(T)/4
  1231.                   _SPECIAL_Y(_CURRSPECIAL)=_TANK_Y(T)/4
  1232.                   _SPECIAL_XS(_CURRSPECIAL)=_XSPEED(_GUN_DIRECTION(T))*8
  1233.                   _SPECIAL_YS(_CURRSPECIAL)=_YSPEED(_GUN_DIRECTION(T))*8
  1234.                   _SPECIAL_F(_CURRSPECIAL)=225+T
  1235.                   Add _CURRSPECIAL,1,0 To 39
  1236.                   Dec _GUN_AMMO(T,0)
  1237.                   _UPDATESCORE[False,False,False,True,T]
  1238.                End If 
  1239.             End If 
  1240.             If _GUNFIRE=2
  1241.                If _PF(T)=0
  1242.                   If _GUN_AMMO(T,1)>0
  1243.                      Inc _FIRED(T)
  1244.                      If _DEMO=False
  1245.                         Sam Play 8,3
  1246.                      End If 
  1247.                      _SPECIAL_X(_CURRSPECIAL)=_TANK_X(T)/4
  1248.                      _SPECIAL_Y(_CURRSPECIAL)=_TANK_Y(T)/4
  1249.                      _SPECIAL_XS(_CURRSPECIAL)=_XSPEED(_GUN_DIRECTION(T))*6
  1250.                      _SPECIAL_YS(_CURRSPECIAL)=_YSPEED(_GUN_DIRECTION(T))*6
  1251.                      _SPECIAL_F(_CURRSPECIAL)=229+T
  1252.                      Add _CURRSPECIAL,1,0 To 39
  1253.                      _PF(T)=1
  1254.                      Dec _GUN_AMMO(T,1)
  1255.                      _UPDATESCORE[False,False,False,True,T]
  1256.                   End If 
  1257.                End If 
  1258.             Else 
  1259.                _PF(T)=0
  1260.             End If 
  1261.             _XS(T)=_TANK_X(T)-TTX
  1262.             _YS(T)=_TANK_Y(T)-TTY
  1263.             
  1264.             Bob T*2,_TANK_X(T)/64,_TANK_Y(T)/64,_TANK_DIRECTION(T)+(T*56)+1
  1265.             Bob(T*2)+1,_TANK_X(T)/64,_TANK_Y(T)/64,_GUN_DIRECTION(T)+169
  1266.          Else 
  1267.             Dec _TANK_SPECIAL(T)
  1268.             Bob Off T*2
  1269.             Bob Off(T*2)+1
  1270.          End If 
  1271.          
  1272.       Next 
  1273.       
  1274.       For Z=0 To 39
  1275.          _SF=_SPECIAL_F(Z)
  1276.          If _SF<>-100
  1277.             If _SF=>225 and _SF<=231
  1278.                If _SPECIAL_X(Z)>-128 and _SPECIAL_Y(Z)>-128 and _SPECIAL_X(Z)<10096 and _SPECIAL_Y(Z)<8048
  1279.                   M=_MAP((_SPECIAL_X(Z)+128)/256,(_SPECIAL_Y(Z)+128)/256)
  1280.                   PL=_SF-225
  1281.                   If PL=>4
  1282.                      Add PL,-4
  1283.                   End If 
  1284.                   HIT=0
  1285.                   For A=0 To 2
  1286.                      If A<>PL
  1287.                         If Bob Col(Z+6,A*2 To A*2)
  1288.                            HIT=A+1
  1289.                            A=5
  1290.                         End If 
  1291.                      End If 
  1292.                   Next 
  1293.                   If HIT
  1294.                      Inc _HIT(PL)
  1295.                   End If 
  1296.                   If(M=>270 and M<=276) or HIT
  1297.                      If HIT
  1298.                         HT=HIT-1
  1299.                         Dec _TANK_SHIELD(HT)
  1300.                         _UPDATESCORE[True,False,False,False,HT]
  1301.                         If _TANK_SHIELD(HT)<=0
  1302.                            If _DEMO=False
  1303.                               Sam Play 8,5
  1304.                            End If 
  1305.                            NX=_TANK_X(HT)/4
  1306.                            NY=_TANK_Y(HT)/4
  1307.                            For TA=1 To 10
  1308.                               _SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
  1309.                               _SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
  1310.                               _SPECIAL_F(_CURRSPECIAL)=280
  1311.                               Add _CURRSPECIAL,1,0 To 39
  1312.                            Next 
  1313.                            _OX(HT)=_TANK_X(HT)/64
  1314.                            _OY(HT)=_TANK_Y(HT)/64
  1315.                            _TANK_VELOCITY(HT)=0
  1316.                            _TANK_SHIELD(HT)=35
  1317.                            _TANK_FUEL(HT)=50000
  1318.                            _TANK_SPECIAL(HT)=100
  1319.                            _GUN_AMMO(HT,0)=99
  1320.                            _GUN_AMMO(HT,1)=5
  1321.                            _INTANK=-1
  1322.                            For A=0 To 2
  1323.                               If _FLAG_MODE(A)=HT
  1324.                                  _INTANK=A
  1325.                                  A=5
  1326.                               End If 
  1327.                            Next 
  1328.                            If _INTANK>-1
  1329.                               _FLAG_MODE(_INTANK)=-5
  1330.                               _FLAG_X(_INTANK)=_TANK_X(HT)/64
  1331.                               _FLAG_Y(_INTANK)=_TANK_Y(HT)/64
  1332.                            End If 
  1333.                            _TANK_X(HT)=_BASE_X(HT)*16*64
  1334.                            _TANK_Y(HT)=_BASE_Y(HT)*16*64
  1335.                            _UPDATESCORE[True,True,True,True,HT]
  1336.                         End If 
  1337.                         If _SF=>225 and _SF<=227
  1338.                            Add _TANK_XS(HT),_SPECIAL_XS(Z)/2
  1339.                            Add _TANK_YS(HT),_SPECIAL_YS(Z)/2
  1340.                         Else 
  1341.                            Add _TANK_XS(HT),_SPECIAL_XS(Z)*2
  1342.                            Add _TANK_YS(HT),_SPECIAL_YS(Z)*2
  1343.                         End If 
  1344.                      End If 
  1345.                      If _SF=>225 and _SF<=227
  1346.                         _SPECIAL_F(Z)=280
  1347.                         If _DEMO=False
  1348.                            Sam Play 8,2
  1349.                         End If 
  1350.                      Else 
  1351.                         If _DEMO=False
  1352.                            Sam Play 8,5
  1353.                         End If 
  1354.                         CZ=Z
  1355.                         NX=_SPECIAL_X(Z)
  1356.                         NY=_SPECIAL_Y(Z)
  1357.                         For A=1 To 10
  1358.                            _SPECIAL_X(CZ)=NX+Rnd(512)-256
  1359.                            _SPECIAL_Y(CZ)=NY+Rnd(512)-256
  1360.                            _SPECIAL_F(CZ)=280
  1361.                            CZ=_CURRSPECIAL
  1362.                            Add _CURRSPECIAL,1,0 To 39
  1363.                         Next 
  1364.                      End If 
  1365.                   Else 
  1366.                      Add _SPECIAL_X(Z),_SPECIAL_XS(Z)
  1367.                      Add _SPECIAL_Y(Z),_SPECIAL_YS(Z)
  1368.                   End If 
  1369.                Else 
  1370.                   _SPECIAL_F(Z)=300
  1371.                End If 
  1372.             Else 
  1373.                Inc _SPECIAL_F(Z)
  1374.                If _SPECIAL_F(Z)=282
  1375.                   If _SPECIAL_X(Z)>-128 and _SPECIAL_Y(Z)>-128 and _SPECIAL_X(Z)<10096 and _SPECIAL_Y(Z)<8048
  1376.                      TX=(_SPECIAL_X(Z)+128)/256
  1377.                      TY=(_SPECIAL_Y(Z)+128)/256
  1378.                      M=_MAP(TX,TY)
  1379.                      If M=>270 and M<=272
  1380.                         _MAP(TX,TY)=M+7
  1381.                         Paste Bob TX*16,TY*16,M+7
  1382.                      End If 
  1383.                   End If 
  1384.                End If 
  1385.                HIT=-1
  1386.                For A=0 To 2
  1387.                   If Bob Col(Z+6,A*2 To A*2)
  1388.                      HIT=A
  1389.                      A=5
  1390.                   End If 
  1391.                Next 
  1392.                If HIT=>0
  1393.                   Dec _TANK_SHIELD(HIT)
  1394.                   _UPDATESCORE[True,False,False,False,HIT]
  1395.                   If _TANK_SHIELD(HIT)<=0
  1396.                      If _DEMO=False
  1397.                         Sam Play 8,5
  1398.                      End If 
  1399.                      CZ=Z
  1400.                      NX=_TANK_X(HIT)/4
  1401.                      NY=_TANK_Y(HIT)/4
  1402.                      For TA=1 To 10
  1403.                         _SPECIAL_X(CZ)=NX+Rnd(512)-256
  1404.                         _SPECIAL_Y(CZ)=NY+Rnd(512)-256
  1405.                         _SPECIAL_F(CZ)=280
  1406.                         CZ=_CURRSPECIAL
  1407.                         Add _CURRSPECIAL,1,0 To 39
  1408.                      Next 
  1409.                      _OX(HIT)=_TANK_X(HIT)/64
  1410.                      _OY(HIT)=_TANK_Y(HIT)/64
  1411.                      _TANK_VELOCITY(HIT)=0
  1412.                      _TANK_SHIELD(HIT)=35
  1413.                      _TANK_FUEL(HIT)=50000
  1414.                      _TANK_SPECIAL(HIT)=100
  1415.                      _GUN_AMMO(HIT,0)=99
  1416.                      _GUN_AMMO(HIT,1)=5
  1417.                      _INTANK=-1
  1418.                      For A=0 To 2
  1419.                         If _FLAG_MODE(A)=HIT
  1420.                            _INTANK=A
  1421.                            A=5
  1422.                         End If 
  1423.                      Next 
  1424.                      If _INTANK>-1
  1425.                         _FLAG_MODE(_INTANK)=-5
  1426.                         _FLAG_X(_INTANK)=_TANK_X(HIT)/64
  1427.                         _FLAG_Y(_INTANK)=_TANK_Y(HIT)/64
  1428.                      End If 
  1429.                      _TANK_X(HIT)=_BASE_X(HIT)*16*64
  1430.                      _TANK_Y(HIT)=_BASE_Y(HIT)*16*64
  1431.                      _UPDATESCORE[True,True,True,True,HIT]
  1432.                   End If 
  1433.                End If 
  1434.             End If 
  1435.             Bob Z+6,_SPECIAL_X(Z)/16,_SPECIAL_Y(Z)/16,_SPECIAL_F(Z)
  1436.             If _SPECIAL_F(Z)=>288
  1437.                _SPECIAL_F(Z)=-100
  1438.             End If 
  1439.          Else 
  1440.             Bob Off Z+6
  1441.          End If 
  1442.       Next 
  1443.       
  1444.       For Z=0 To 2
  1445.          If _FLAG_MODE(Z)<0
  1446.             If _FLAG_MODE(Z)=-1
  1447.                For A=0 To 2
  1448.                   If Bob Col(Z+46,A*2 To A*2)
  1449.                      _PICKUP=True
  1450.                      For B=0 To 2
  1451.                         If B<>Z
  1452.                            If _FLAG_MODE(B)=A
  1453.                               _PICKUP=False
  1454.                               B=5
  1455.                            End If 
  1456.                         End If 
  1457.                      Next 
  1458.                      If _FLAG_X(Z)=_BASE_X(A)*16
  1459.                         If _FLAG_Y(Z)=_BASE_Y(A)*16
  1460.                            _PICKUP=False
  1461.                         End If 
  1462.                      End If 
  1463.                      If _TANK_SPECIAL(A)>0
  1464.                         _PICKUP=False
  1465.                      End If 
  1466.                      If _PICKUP
  1467.                         _FLAG_MODE(Z)=A
  1468.                      End If 
  1469.                      _UPDATESCORE[False,False,True,False,A]
  1470.                      _UPDATESCORE[False,False,True,False,Z]
  1471.                      A=5
  1472.                   End If 
  1473.                Next 
  1474.             Else 
  1475.                If Bob Col(Z+46,0 To 5)=False
  1476.                   Inc _FLAG_MODE(Z)
  1477.                End If 
  1478.             End If 
  1479.             Bob Z+46,_FLAG_X(Z),_FLAG_Y(Z),267+Z
  1480.          Else 
  1481.             Bob Off Z+46
  1482.          End If 
  1483.       Next 
  1484.       
  1485.       Bob Draw 
  1486.       Screen 0
  1487.       For Z=0 To 2
  1488.          If _TANK_SPECIAL(Z)=>75
  1489.             NX=_OX(Z)
  1490.             NY=_OY(Z)
  1491.             _TANK_XS(Z)=0
  1492.             _TANK_YS(Z)=0
  1493.          Else 
  1494.             TMP=75-_TANK_SPECIAL(Z)
  1495.             DX=(_TANK_X(Z)/64)-_OX(Z)
  1496.             DY=(_TANK_Y(Z)/64)-_OY(Z)
  1497.             NX=((DX*TMP)/76)+_OX(Z)
  1498.             NY=((DY*TMP)/76)+_OY(Z)
  1499.          End If 
  1500.          TX=Min(Max(NX-45,0),534)
  1501.          TY=Min(Max(NY-92,0),312)
  1502.          Screen Copy 2,TX,TY,TX+112,TY+200 To 0,Z*107,0
  1503.       Next 
  1504.       Ink 0,0,0
  1505.       Draw 106,0 To 106,199
  1506.       Draw 213,0 To 213,199
  1507.       If _DEMO
  1508.          Paste Bob 0,160,289
  1509.       Else 
  1510.          If Key State(69)
  1511.             _WON=-1
  1512.          End If 
  1513.          If Key State(95)
  1514.             Unpack 16 To 7
  1515.             Screen To Back 7
  1516.             Sam Play 3
  1517.             For Z=1 To 216 Step 8
  1518.                Screen Display 0,128,42-Z,320,200
  1519.                Screen Display 1,128,244+(Z/2),320,64
  1520.                Wait Vbl 
  1521.             Next 
  1522.             Screen Hide 0
  1523.             Screen Hide 1
  1524.             Repeat 
  1525.                Led Off 
  1526.                Wait Vbl 
  1527.             Until Key State(95)=0
  1528.             Repeat 
  1529.                Led Off 
  1530.                Wait Vbl 
  1531.             Until Key State(95)
  1532.             Repeat 
  1533.                Led Off 
  1534.                Wait Vbl 
  1535.             Until Key State(95)=0
  1536.             Screen Show 0
  1537.             Screen Show 1
  1538.             For Z=216 To 0 Step -8
  1539.                Screen Display 0,128,42-Z,320,200
  1540.                Screen Display 1,128,244+(Z/2),320,64
  1541.                Wait Vbl 
  1542.             Next 
  1543.             Sam Play 6
  1544.             Screen Close 7
  1545.             Wait 30
  1546.          End If 
  1547.       End If 
  1548.       Screen Swap 
  1549.       Wait Vbl 
  1550.       Led Off 
  1551.       
  1552.       If _DEMO
  1553.          If Timer>2000
  1554.             _WON=-1
  1555.          End If 
  1556.          If Fire(0) or Fire(1)
  1557.             _WON=-2
  1558.          End If 
  1559.       End If 
  1560.       
  1561.    Until _WON<>0
  1562.    
  1563.    Screen 0
  1564.    Fade 1
  1565.    Rainbow Del 0
  1566.    Timer=0
  1567.    Screen Close 2
  1568.    Wait Max(1,15-Timer)
  1569.    Screen 1
  1570.    Fade 1
  1571.    Timer=0
  1572.    Screen Close 0
  1573.    Wait Max(1,15-Timer)
  1574.    Screen Close 1
  1575.    If _DEMO=False
  1576.       Volume %1111,63
  1577.    End If 
  1578.    
  1579. End Proc[_WON]
  1580.  
  1581. Procedure _UPDATESCORE[SHIELD,FUEL,FLAGS,AMMO,P]
  1582.    Screen 1
  1583.    AD=P*107
  1584.    If SHIELD
  1585.       Ink 0,0,0
  1586.       Bar 17+AD,52 To 53+AD,56
  1587.       If _TANK_SHIELD(P)=>0
  1588.          Ink 8,0,0
  1589.          Bar 17+AD,52 To AD+18+_TANK_SHIELD(P),56
  1590.       End If 
  1591.    End If 
  1592.    If FUEL
  1593.       Ink 0,0,0
  1594.       Bar 11+AD,22 To 14+AD,58
  1595.       If _TANK_FUEL(P)=>0
  1596.          Ink 8,0,0
  1597.          Bar 11+AD,57-(_TANK_FUEL(P)/1428) To 14+AD,58
  1598.       End If 
  1599.    End If 
  1600.    If FLAGS
  1601.       _ATBASE=1
  1602.       For A=0 To 2
  1603.          If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(P)*16 and _FLAG_Y(A)=_BASE_Y(P)*16
  1604.             _ATBASE=0
  1605.             A=5
  1606.          End If 
  1607.       Next 
  1608.       _INTANK=1
  1609.       For A=0 To 2
  1610.          If _FLAG_MODE(A)=P
  1611.             _INTANK=0
  1612.             A=5
  1613.          End If 
  1614.       Next 
  1615.       Ink 0,0,0
  1616.       Bar 22+AD,29 To 35+AD,42
  1617.       Bar 40+AD,29 To 53+AD,42
  1618.       Paste Bob 22+AD,29,294+_INTANK
  1619.       Paste Bob 40+AD,29,294+_ATBASE
  1620.    End If 
  1621.    If AMMO
  1622.       Ink 0,0,0
  1623.       Bar 22+AD,22 To 36+AD,29
  1624.       Bar 39+AD,22 To 53+AD,29
  1625.       Ink 10,0,0
  1626.       N=_GUN_AMMO(P,1)
  1627.       N$=Str$(N)
  1628.       N$=Right$(N$,Len(N$)-1)
  1629.       If Len(N$)<2
  1630.          N$="0"+N$
  1631.       End If 
  1632.       Text 23+AD,27,N$
  1633.       N=_GUN_AMMO(P,0)
  1634.       N$=Str$(N)
  1635.       N$=Right$(N$,Len(N$)-1)
  1636.       If Len(N$)<2
  1637.          N$="0"+N$
  1638.       End If 
  1639.       Text 40+AD,27,N$
  1640.    End If 
  1641.    Screen 2
  1642. End Proc
  1643.  
  1644. Procedure _TEST[A,B,C,D]
  1645.    CHANGE=False
  1646.    
  1647.    T=0
  1648.    If A
  1649.       Inc T
  1650.    End If 
  1651.    If B
  1652.       Inc T
  1653.    End If 
  1654.    If C
  1655.       Inc T
  1656.    End If 
  1657.    If D
  1658.       Inc T
  1659.    End If 
  1660.    
  1661.    If T<2
  1662.       CHANGE=True
  1663.    Else 
  1664.       If T=2
  1665.          If A and C
  1666.             CHANGE=True
  1667.          End If 
  1668.          If B and D
  1669.             CHANGE=True
  1670.          End If 
  1671.       End If 
  1672.    End If 
  1673.    
  1674. End Proc[CHANGE]
  1675.  
  1676. Procedure _NUMBER[A,B,C,D,E,F,G,H]
  1677.    If E
  1678.       BN=256
  1679.    End If 
  1680.    If G
  1681.       BN=257
  1682.    End If 
  1683.    If A
  1684.       BN=258
  1685.    End If 
  1686.    If C
  1687.       BN=259
  1688.    End If 
  1689.    
  1690.    If F
  1691.       BN=252
  1692.    End If 
  1693.    If H
  1694.       BN=253
  1695.    End If 
  1696.    If B
  1697.       BN=254
  1698.    End If 
  1699.    If D
  1700.       BN=255
  1701.    End If 
  1702.    
  1703.    If D and E and F
  1704.       BN=260
  1705.    End If 
  1706.    If F and G and H
  1707.       BN=261
  1708.    End If 
  1709.    If A and B and H
  1710.       BN=262
  1711.    End If 
  1712.    If B and C and D
  1713.       BN=263
  1714.    End If 
  1715.    
  1716.    WATERDAT:
  1717.    Data %1001,254
  1718.    Data %110,252
  1719.    Data %11,255
  1720.    Data %1100,253
  1721.    Data %10,256
  1722.    Data %100,257
  1723.    Data %1000,258
  1724.    Data %1,259
  1725.    Data %111,260
  1726.    Data %1110,261
  1727.    Data %1101,262
  1728.    Data %1011,263
  1729.    Data %1111,248+Rnd(3)
  1730. End Proc[BN]
  1731.  
  1732. Procedure _WATER[BN]
  1733.    If BN=>248 and BN<=251
  1734.       _WAT=True
  1735.    Else 
  1736.       _WAT=False
  1737.    End If 
  1738. End Proc[_WAT]
  1739.  
  1740. Procedure _TITLESCREEN
  1741.    Unpack 12 To 7
  1742.    Screen Hide 7
  1743.    For Z=24 To 31
  1744.       Colour Z,$FFF
  1745.    Next 
  1746.    Screen Open 0,320,256,32,Lowres
  1747.    Screen Hide 0
  1748.    Flash Off 
  1749.    Curs Off 
  1750.    For Z=0 To 31
  1751.       Colour Z,$0
  1752.    Next 
  1753.    Screen Copy 7 To 0
  1754.    Screen Show 0
  1755.    Fade 1 To 7
  1756.    Screen Close 7
  1757.    Wait 15
  1758.    OF=0
  1759.    _DONE=False
  1760.    _QUIT=False
  1761.    Timer=0
  1762.    Repeat 
  1763.       If Rnd(1)=0
  1764.          If OF<7
  1765.             Shift Down 2,1,31,1
  1766.             Wait Vbl 
  1767.             Shift Off 
  1768.             Inc OF
  1769.          End If 
  1770.       Else 
  1771.          If OF>1
  1772.             Shift Up 1,1,31,1
  1773.             Wait Vbl 
  1774.             Shift Off 
  1775.             Dec OF
  1776.          End If 
  1777.       End If 
  1778.       If Timer>500
  1779.          Fade 1
  1780.          Wait 15
  1781.          Screen Close 0
  1782.          _MAINGAME[True]
  1783.          If Param=-2
  1784.             _DONE=True
  1785.             Screen Open 0,320,256,2,Lowres
  1786.             Screen Hide 0
  1787.          Else 
  1788.             Unpack 12 To 7
  1789.             Screen Hide 7
  1790.             For Z=24 To 31
  1791.                Colour Z,$FFF
  1792.             Next 
  1793.             Screen Open 0,320,256,32,Lowres
  1794.             Screen Hide 0
  1795.             Flash Off 
  1796.             Curs Off 
  1797.             For Z=0 To 31
  1798.                Colour Z,$0
  1799.             Next 
  1800.             Screen Copy 7 To 0
  1801.             Screen Show 0
  1802.             Fade 1 To 7
  1803.             Screen Close 7
  1804.             Wait 15
  1805.             OF=0
  1806.             Timer=0
  1807.          End If 
  1808.       End If 
  1809.       If Fire(0) or Fire(1)
  1810.          _DONE=True
  1811.       End If 
  1812.       If Key State(69)
  1813.          _QUIT=True
  1814.          _DONE=True
  1815.       End If 
  1816.       Led Off 
  1817.    Until _DONE
  1818.    Fade 1
  1819.    Wait 15
  1820.    Screen Close 0
  1821. End Proc[_QUIT]
  1822.  
  1823. Procedure _RESULTS[WINNER]
  1824.    Screen Open 0,320,256,32,Lowres
  1825.    Screen Hide 0
  1826.    Flash Off 
  1827.    Curs Off 
  1828.    For Z=0 To 31
  1829.       Colour Z,$0
  1830.    Next 
  1831.    _CREATEBACKGROUND
  1832.    Restore WINNERDAT
  1833.    For Z=1 To WINNER
  1834.       Read _COL
  1835.    Next 
  1836.    For Z=24 To 31
  1837.       _GETCOL[_COL,Z-23,8]
  1838.       Colour Z,Param
  1839.    Next 
  1840.    Screen Copy 7 To 0
  1841.    Unpack 14 To 6
  1842.    Screen Hide 6
  1843.    For Z=8 To 23
  1844.       Screen 6
  1845.       _COL=Colour(Z)
  1846.       Screen 7
  1847.       Colour Z,_COL
  1848.    Next 
  1849.    Screen 0
  1850.    Get Bob 6,297,0,0 To 309,68
  1851.    Paste Bob 0,0,297
  1852.    Del Bob 297
  1853.    AY=((WINNER-1)*49)
  1854.    Get Bob 6,297,10,85+AY To 185,135+AY
  1855.    Paste Bob 73,103,297
  1856.    Del Bob 297
  1857.    Screen Close 6
  1858.    Set Font _BOSTON18
  1859.    Ink 23,0,0
  1860.    Gr Writing 0
  1861.    N$="Statistics"
  1862.    Text 160-(Text Length(N$)/2),200,N$
  1863.    Set Font _MINI
  1864.    Ink 20,0,0
  1865.    N$="           Fired    Hit    Hit ratio  Skill rating"
  1866.    Text 10,220,N$
  1867.    Ink 15,0,0
  1868.    For T=0 To 2
  1869.       N$="Player"+Str$(T+1)
  1870.       Text 10,(T*7)+230,N$
  1871.       N$=Str$(_FIRED(T))+" "
  1872.       Text 92-(Text Length(N$)/2),(T*7)+230,N$
  1873.       N$=Str$(_HIT(T))+" "
  1874.       Text 139-(Text Length(N$)/2),(T*7)+230,N$
  1875.       If _FIRED(T)>0
  1876.          N$=Str$((_HIT(T)*100)/_FIRED(T))+"%"
  1877.       Else 
  1878.          N$=" 0%"
  1879.       End If 
  1880.       Text 196-(Text Length(N$)/2),(T*7)+230,N$
  1881.       N$=Str$((_SKILL(T)*100)/_TOTALT)+"%"
  1882.       Text 270-(Text Length(N$)/2),(T*7)+230,N$
  1883.    Next 
  1884.    Gr Writing 1
  1885.    Set Rainbow 0,15,21,"","",""
  1886.    Restore WINNERDAT
  1887.    For Z=0 To 2
  1888.       Read _COL
  1889.       V=3
  1890.       For Y=Z*7 To(Z*7)+6
  1891.          Inc V
  1892.          _GETCOL[_COL,V,10]
  1893.          Rain(0,Y)=Param
  1894.       Next 
  1895.    Next 
  1896.    Rainbow 0,0,267,22
  1897.    Screen Show 0
  1898.    Fade 1 To 7
  1899.    Screen Close 7
  1900.    Repeat 
  1901.       Led Off 
  1902.       Wait Vbl 
  1903.    Until Fire(0) or Fire(1)
  1904.    Fade 1
  1905.    Wait 15
  1906.    Screen Close 0
  1907.    Rainbow Del 0
  1908.    
  1909.    WINNERDAT:
  1910.    Data $F33,$3F3,$36F
  1911. End Proc
  1912.  
  1913. Procedure _CREATEBACKGROUND
  1914.    Unpack 13 To 7
  1915.    Screen Hide 7
  1916.    Restore BACKGROUND
  1917.    Read N
  1918.    R=Rnd(N-1)+1
  1919.    For Z=1 To R
  1920.       Read _COL
  1921.    Next 
  1922.    For Z=1 To 7
  1923.       _GETCOL[_COL,Z,7]
  1924.       Colour Z,Param
  1925.    Next 
  1926.    
  1927.    BACKGROUND:
  1928.    Data 6
  1929.    Data $A52,$C,$900,$609,$359,$770
  1930. End Proc
  1931.  
  1932. Procedure _GETCOL[TC,N,D]
  1933.    R=TC/256
  1934.    G=(TC-(R*256))/16
  1935.    B=TC-(R*256)-(G*16)
  1936.    NR=(R*N)/D
  1937.    NG=(G*N)/D
  1938.    NB=(B*N)/D
  1939.    FC=(NR*256)+(NG*16)+NB
  1940. End Proc[FC]
  1941.  
  1942. Procedure _CONFIGSCREEN
  1943.    _CREATEBACKGROUND
  1944.    Unpack 15 To 2
  1945.    Screen Hide 2
  1946.    Screen Open 1,320,256,32,Lowres
  1947.    Screen Hide 1
  1948.    Curs Off 
  1949.    Flash Off 
  1950.    Screen Copy 7 To 1
  1951.    Get Palette 2
  1952.    For Z=0 To 7
  1953.       Screen 7
  1954.       _COL=Colour(Z)
  1955.       Screen 1
  1956.       Colour Z,_COL
  1957.    Next 
  1958.    Screen 1
  1959.    Get Bob 2,297,0,0 To 319,255
  1960.    Paste Bob 0,0,297
  1961.    Del Bob 297
  1962.    Screen Close 2
  1963.    Screen Close 7
  1964.    Screen Open 0,320,256,32,Lowres
  1965.    Screen Hide 0
  1966.    Flash Off 
  1967.    Curs Off 
  1968.    For Z=0 To 31
  1969.       Colour Z,$0
  1970.    Next 
  1971.    Screen Copy 1 To 0
  1972.    Reserve Zone 8
  1973.    N=0
  1974.    For Y=113 To 147 Step 17
  1975.       For X=26 To 169 Step 143
  1976.          Inc N
  1977.          Set Zone N,X,Y To X+140,Y+9
  1978.       Next 
  1979.    Next 
  1980.    Set Zone 7,82,180 To 237,196
  1981.    Set Zone 8,128,216 To 187,233
  1982.    Set Font _MINI
  1983.    _UPDATECONTROLS
  1984.    Sprite Update Off 
  1985.    Screen Show 0
  1986.    Fade 1 To 1
  1987.    Timer=10
  1988.    Repeat 
  1989.       Limit Mouse 
  1990.       Sprite 1,X Mouse,Y Mouse,296
  1991.       If Jleft(1)
  1992.          X Mouse=X Mouse-2
  1993.       End If 
  1994.       If Jright(1)
  1995.          X Mouse=X Mouse+2
  1996.       End If 
  1997.       If Jup(1)
  1998.          Y Mouse=Y Mouse-2
  1999.       End If 
  2000.       If Jdown(1)
  2001.          Y Mouse=Y Mouse+2
  2002.       End If 
  2003.       If Fire(0) or Fire(1)
  2004.          M=Mouse Zone
  2005.          If M=>1 and M<=6 and Timer>10
  2006.             Timer=0
  2007.             T=(M-1)/2
  2008.             P=M-(T*2)-1
  2009.             Add _CONTROL(T,P),1,0 To 6
  2010.             _UPDATECONTROLS
  2011.          End If 
  2012.          If M=7
  2013.             _INSTRUCTIONS
  2014.          End If 
  2015.       Else 
  2016.          M=0
  2017.       End If 
  2018.       Sprite Update 
  2019.       Wait Vbl 
  2020.       Led Off 
  2021.    Until M=8
  2022.    Screen 0
  2023.    Fade 1
  2024.    Wait 15
  2025.    Sprite Off 1
  2026.    Sprite Update 
  2027.    Screen Close 0
  2028.    Screen Close 1
  2029. End Proc
  2030.  
  2031. Procedure _INSTRUCTIONS
  2032.    Sprite Off 1
  2033.    Sprite Update 
  2034.    Wait Vbl 
  2035.    Screen Open 2,320,256,32,Lowres
  2036.    Screen Hide 2
  2037.    Curs Off 
  2038.    Flash Off 
  2039.    Cls 0
  2040.    Colour 8,$FFF
  2041.    Colour 9,$FF0
  2042.    Colour 10,$F00
  2043.    Colour 11,$AAA
  2044.    Colour 12,$90F
  2045.    Colour 13,$5A5
  2046.    Restore _INSTRUCTIONSDAT
  2047.    Read NUP
  2048.    PAG=0
  2049.    _PTY=0
  2050.    Repeat 
  2051.       Y=5
  2052.       Screen 0
  2053.       Fade 1
  2054.       Timer=0
  2055.       _CREATEBACKGROUND
  2056.       Screen 2
  2057.       Screen Copy 7 To 2
  2058.       For Z=1 To 7
  2059.          Screen 7
  2060.          _COL=Colour(Z)
  2061.          Screen 2
  2062.          Colour Z,_COL
  2063.       Next 
  2064.       Screen Close 7
  2065.       Screen 2
  2066.       Gr Writing 0
  2067.       Repeat 
  2068.          Read R$
  2069.          If R$<>"PAGE" and R$<>"END"
  2070.             _DISPLAYLINE[R$,Y]
  2071.             Y=Param
  2072.          End If 
  2073.       Until R$="PAGE" or R$="END"
  2074.       Set Font _MINI
  2075.       Ink 11,0,0
  2076.       Inc P
  2077.       N$="Page"+Str$(P)+" of"+Str$(NUP)
  2078.       Text 310-Text Length(N$),250,N$
  2079.       Gr Writing 1
  2080.       Screen 0
  2081.       Wait Max(1,15-Timer)
  2082.       Screen Copy 2 To 0
  2083.       Fade 1 To 2
  2084.       Repeat 
  2085.          Wait Vbl 
  2086.          Led Off 
  2087.       Until Fire(0) or Fire(1)
  2088.    Until R$="END"
  2089.    Fade 1
  2090.    Wait 15
  2091.    Screen Close 2
  2092.    Screen Copy 1 To 0
  2093.    Screen 0
  2094.    _UPDATECONTROLS
  2095.    Fade 1 To 1
  2096.    
  2097.    _INSTRUCTIONSDAT:
  2098.    Data 5
  2099.    Data "1How to play"
  2100.    Data "2The aim of the game"
  2101.    Data "3To have two flags in your base at one time."
  2102.    Data "2How to do it"
  2103.    Data "3You have a tank, driven and gunned independently, "
  2104.    Data "3which can hold only one flag at once. To pick up a"
  2105.    Data "3flag, you drive over it. You tank will drop any"
  2106.    Data "3flags it may have when:"
  2107.    Data "5  It explodes"
  2108.    Data "5  It is on its base"
  2109.    Data "2Bases"
  2110.    Data "3Your base is a circle of your colour which will"
  2111.    Data "3recharge your tank when it is parked on it. When"
  2112.    Data "3you first start, you will be on top of your base."
  2113.    Data "3Your base cannot be destroyed and starts with a"
  2114.    Data "3flag of your colour in it. This can be stolen."
  2115.    Data "2Tanks"
  2116.    Data "3There are three tanks in the game, each of a"
  2117.    Data "3different colour; red, green and blue. Each tank"
  2118.    Data "PAGE"
  2119.    Data "1How to play"
  2120.    Data "4(continued...)"
  2121.    Data "3"
  2122.    Data "3has a certain amount of shield, fuel and ammo, all"
  2123.    Data "3of which can be recharged at the appropriate base."
  2124.    Data "3Ramming another tank looses you both a bit of"
  2125.    Data "3shield. Furthermore, driving looses you fuel."
  2126.    Data "3Surprisingly, getting shot will loose you health."
  2127.    Data "3There are two types of weapon:"
  2128.    Data "5  Machine gun - weak, but you get 99 shots"
  2129.    Data "5  Rocket laucher - powerful, with only 5 shots"
  2130.    Data "3If you run out of either fuel or shield, your tank"
  2131.    Data "3will explode, releasing any flags it contains."
  2132.    Data "2Status bar"
  2133.    Data "3Whilst playing the game, along the bottom of the"
  2134.    Data "3display is the status bar. For each particular"
  2135.    Data "3tank, the following information is shown:"
  2136.    Data "5  Fuel"
  2137.    Data "5  Shield"
  2138.    Data "5  How much ammo you have for the two weapons"
  2139.    Data "5  Whether or not your tank has a flag in it"
  2140.    Data "3  (represented by the white flag)"
  2141.    Data "5  Whether or not your base has a flag in it"
  2142.    Data "3  (represented by the flag of your tank's colour)"
  2143.    Data "PAGE"
  2144.    Data "1Controls"
  2145.    Data "2In-game"
  2146.    Data "6KEYS 1 KEYS 2 JOYSTICK    DRIVER       GUNNER"
  2147.    Data "3  s      \       up     accelerate   machine gun"
  2148.    Data "3  z      ]      down      brake    rocket launcher"
  2149.    Data "3l-alt    -      left    turn left    rotate left"
  2150.    Data "3l-amiga  =      right   turn right   rotate right"
  2151.    Data "2Other keys"
  2152.    Data "3Help - pauses"
  2153.    Data "3(Esc)ape - quits current game (in game only)"
  2154.    Data "3(Esc)ape - quit program (title screen only)"
  2155.    Data "3"
  2156.    Data "3"
  2157.    Data "2To contact the author"
  2158.    Data "3   Post - 54 Knowles Avenue, Crowthorne,"
  2159.    Data "3          Berkshire, RG45 6DU, England."
  2160.    Data "3"
  2161.    Data "3 E-Mail - J.R.Daniels@Warwick.ac.uk"
  2162.    Data "3    WWW - http://www.warwick.ac.uk/~csuaw/"
  2163.    Data "PAGE"
  2164.    Data "1About the game"
  2165.    Data "2Stuff used"
  2166.    Data "5  AMOS Professional v2"
  2167.    Data "5  6MB A1200/040 with 1.8Gb HD"
  2168.    Data "5  Deluxe Paint IV AGA"
  2169.    Data "5  Wierd Science's `Sounds Terrific' CDs"
  2170.    Data "5  OctaMED Professional v5"
  2171.    Data "5  Aiwa ACD-300 CD-ROM drive unit"
  2172.    Data "2`Amusing' facts about the game"
  2173.    Data "5  It took about two weeks to program, from"
  2174.    Data "3  original concept to finished program."
  2175.    Data "5  It consists of over 2300 lines of code."
  2176.    Data "5  The levels are randomly generated - so there are"
  2177.    Data "3  literally billions of different possibilities."
  2178.    Data "5  The graphics take up a mere 144K of memory."
  2179.    Data "5  The sound, however, is taking up 273K."
  2180.    Data "5  The computer gunners are rather clever - they"
  2181.    Data "3  even take into account the fact that you are"
  2182.    Data "3  moving, and fire ahead appropriately."
  2183.    Data "5  The computer drivers, however, are (to say the"
  2184.    Data "3  least) not quite as smart."
  2185.    Data "PAGE"
  2186.    Data "1Credits"
  2187.    Data "2Coding"
  2188.    Data "4James Daniels"
  2189.    Data "2Music"
  2190.    Data "4Night Shade of CRS"
  2191.    Data "2Graphics"
  2192.    Data "4James Daniels"
  2193.    Data "2Sound"
  2194.    Data "4Sounds Terrific CD"
  2195.    Data "4James Daniels"
  2196.    Data "2Playtesters"
  2197.    Data "4James Daniels"
  2198.    Data "4Christopher Daniels"
  2199.    Data "4Paul L'Allier"
  2200.    Data "4Bernard L'Allier"
  2201.    Data "4Jonathan Hughes"
  2202.    Data "4Alex Smith"
  2203.    Data "4Max Robinson"
  2204.    Data "END"
  2205. End Proc
  2206.  
  2207. Procedure _DISPLAYLINE[TXT$,Y]
  2208.    Led Off 
  2209.    T$=Left$(TXT$,1)
  2210.    TXT$=Right$(TXT$,Len(TXT$)-1)
  2211.    If T$="1"
  2212.       If _PTY<>1
  2213.          Set Font _BOSTON23
  2214.          _PTY=1
  2215.       End If 
  2216.       Ink 9,0,0
  2217.       Text 160-(Text Length(TXT$)/2),Y+23,TXT$
  2218.       Add Y,30
  2219.    End If 
  2220.    If T$="2"
  2221.       If _PTY<>2
  2222.          _PTY=2
  2223.          Set Font _BOSTON18
  2224.       End If 
  2225.       Ink 10,0,0
  2226.       Text 2,Y+19,TXT$
  2227.       Add Y,24
  2228.    End If 
  2229.    If T$="3"
  2230.       If _PTY<>3
  2231.          _PTY=3
  2232.          Set Font _MINI
  2233.       End If 
  2234.       Ink 8,0,0
  2235.       Text 15,Y+6,TXT$
  2236.       Add Y,7
  2237.    End If 
  2238.    If T$="4"
  2239.       If _PTY<>3
  2240.          _PTY=3
  2241.          Set Font _MINI
  2242.       End If 
  2243.       Ink 8,0,0
  2244.       Text 310-Text Length(TXT$),Y+6,TXT$
  2245.       Add Y,7
  2246.    End If 
  2247.    If T$="5"
  2248.       If _PTY<>3
  2249.          _PTY=3
  2250.          Set Font _MINI
  2251.       End If 
  2252.       Ink 8,0,0
  2253.       Text 15,Y+6,TXT$
  2254.       Ink 12,0,0
  2255.       Bar 21,Y+2 To 24,Y+5
  2256.       Add Y,7
  2257.    End If 
  2258.    If T$="6"
  2259.       If _PTY<>3
  2260.          _PTY=3
  2261.          Set Font _MINI
  2262.       End If 
  2263.       Ink 13,0,0
  2264.       Text 15,Y+6,TXT$
  2265.       Add Y,7
  2266.    End If 
  2267. End Proc[Y]
  2268.  
  2269. Procedure _UPDATECONTROLS
  2270.    Screen Copy 1,26,113,310,157 To 0,26,113
  2271.    Screen 0
  2272.    Gr Writing 0
  2273.    Ink 31,0,0
  2274.    For T=0 To 2
  2275.       For P=0 To 1
  2276.          Restore CONTROLDAT
  2277.          For A=0 To _CONTROL(T,P)
  2278.             Read N$
  2279.          Next 
  2280.          Text 96+(143*P)-(Text Length(N$)/2),120+(T*17),N$
  2281.       Next 
  2282.    Next 
  2283.    Gr Writing 1
  2284.    
  2285.    CONTROLDAT:
  2286.    Data "Computer","Left joystick","Right joystick","Left joystick (adapt.)","Right joystick (adapt.)","Keyboard 1","Keyboard 2"
  2287. End Proc
  2288.  
  2289. Procedure _CHECK[X,Y,ADX,ADY]
  2290.    Add X,ADX
  2291.    Add Y,ADY
  2292.    M=0
  2293.    If X=>0 and Y=>0 and X<=39 and Y<=31
  2294.       M=_MAP(X,Y)
  2295.    End If 
  2296. End Proc[M]
  2297.  
  2298. Procedure _GETFONTS
  2299.    Get Disc Fonts 
  2300.    _SUCCESS= Extension_10_0326(DISK$+"Fonts/JRDMini.font",6)
  2301.    If _SUCCESS<=0
  2302.       End 
  2303.    End If 
  2304.    _SUCCESS= Extension_10_0326(DISK$+"Fonts/Boston.font",18)
  2305.    If _SUCCESS<=0
  2306.       End 
  2307.    End If 
  2308.    _SUCCESS= Extension_10_0326(DISK$+"Fonts/Boston.font",23)
  2309.    If _SUCCESS<=0
  2310.       End 
  2311.    End If 
  2312.    _FINDFONTS
  2313. End Proc
  2314.  
  2315. Procedure _FINDFONTS
  2316.    Get Rom Fonts 
  2317.    _GETFONT["JRDMini",6]
  2318.    _MINI=Param
  2319.    _GETFONT["Boston",18]
  2320.    _BOSTON18=Param
  2321.    _GETFONT["Boston",23]
  2322.    _BOSTON23=Param
  2323. End Proc
  2324.  
  2325. Procedure _GETFONT[_NAME$,_SIZE]
  2326.    _FIND$=Lower$((_NAME$+".font"+Str$(_SIZE)+"rom")-" ")
  2327.    _FONT=0
  2328.    Repeat 
  2329.       Inc _FONT
  2330.    Until Lower$(Font$(_FONT)-" ")=_FIND$
  2331. End Proc[_FONT]
  2332.  
  2333. BASEDAT:
  2334. Data 0,0
  2335. Data 39,0
  2336. Data 19,31